package code.class2;

import java.util.Arrays;

/**
 * 机器人跳高问题
 * *  0  1  2
 * *   [10,30,20...]
 * *  初始化为15，每跳一步，都会 减 或 加 高度差
 */
public class Code03_robotJump {
    public static void main(String[] args) {
        int[] arr = {3, 4, 3, 2, 4};
        int i = robotJump(arr);
        System.out.println("i = " + i);

//        Scanner scanner = new Scanner(System.in);
//        int N = scanner.nextInt();
//        int[] H = new int[N];
//        for (int i = 0; i < N; i++) {
//            H[i] = scanner.nextInt();
//        }
//        System.out.println(robotJump(H));

    }

    public static int robotJump(int[] arr) {
        int l = 0, r = Arrays.stream(arr).max().getAsInt();
        int max = r;
        int ans = -1;
        while (l <= r) {
            int m = l + ((r - l) >> 1);
            if (f(arr, m, max)) {
                ans = m;
                r = m - 1;
            } else {
                l = m + 1;
            }
        }
        return ans;
    }

    /**
     * 计算能量
     */
    private static boolean f(int[] arr, int energy, int max) {
        for (int i = 0; i <= arr.length - 1; i++) {
            if (energy <= arr[i]) {
                energy -= arr[i] - energy; // 下一地点高于当前能量
            } else {
                energy += energy - arr[i]; //// 下一地点低于当前能量
            }
            if (energy >= max) { // 如果能量大于最大值，则一定能通关
                return true;
            }
            if (energy < 0) { // 如果能力小于0，则无法继续
                return false;
            }
        }
        return true;
    }
}
